package com.itheima.youdianda.service.impl;

import cn.hutool.core.collection.ListUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.youdianda.common.R;
import com.itheima.youdianda.mapper.SysMeanMapper;
import com.itheima.youdianda.pojo.SysMenu;
import com.itheima.youdianda.pojo.SysRoleMenu;
import com.itheima.youdianda.service.SysMenuService;
import com.itheima.youdianda.service.SysRoleMenuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 *
 */
@Slf4j
@Service
public class SysMenuServiceImpl extends ServiceImpl<SysMeanMapper, SysMenu> implements SysMenuService {

    //注入sysRoleMean
    @Autowired
    private SysRoleMenuService sysRoleMenuService;


    //菜单更新
    @Override
    public void updateMenu(SysMenu sysMenu) {
        //补充数据  对象sysmenu
        //需要补充  更新时间
        sysMenu.setUpdate_date(LocalDateTime.now());
        updateById(sysMenu);

    }

    //查询所有
    @Override
    public R allMenus() {
        //拥有自己菜单  查询时需要将所有的子级菜单查询出来   所有的菜单的父级pid都是0
        //一级一级的查找创建对象  最高的就是三级目录
       // List<SysMenu> sysMenus = list();
        LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysMenu::getPid, 0);
        List<SysMenu> sysMenus = list(wrapper);

        for (SysMenu sysMenu : sysMenus) {
            //只有三级目录
            Integer id = sysMenu.getId();
            LambdaQueryWrapper<SysMenu> wrapper1 = new LambdaQueryWrapper<>();
            wrapper1.eq(id != null, SysMenu::getPid, id);
            List<SysMenu> menus = list(wrapper1);
            sysMenu.setChildren(menus);
            for (SysMenu menu : menus) {
                Integer pid = menu.getPid();
                LambdaQueryWrapper<SysMenu> wrapper2 = new LambdaQueryWrapper<>();
                wrapper2.eq(pid != null, SysMenu::getPid, pid);
                menu.setChildren(list(wrapper2));
            }

        }
        return R.success(sysMenus);
    }

    //添加
    @Override
    public void addMenu(SysMenu sysMenu) {
        /*Map<String,Object> map =new HashMap<>();
        map.put("component",sysMenu.getComponent());
        map.put("icon",sysMenu.getIcon());
        map.put("is_cache",sysMenu.getIsCache());
        map.put("is_link",sysMenu.getIsLink());
        map.put("is_show",sysMenu.getIsShow());
        map.put("mark",sysMenu.getMark());
        map.put("path",sysMenu.getPath());
        map.put("pid",sysMenu.getPid());
        map.put("redirect",sysMenu.getRedirect());
        map.put("sort",sysMenu.getSort());
        map.put("title",sysMenu.getTitle());
        map.put("type",sysMenu.getType());
        map.put("Create_date",LocalDateTime.now());
        map.put("Update_date",LocalDateTime.now());*/
        //补全数据  是一对多的
        //创建时间和更新时间
        sysMenu.setCreate_date(LocalDateTime.now());
        sysMenu.setUpdate_date(LocalDateTime.now());
        //添加数据
         save(sysMenu);
    }

    //详细信息
    @Override
    public R getInfo(Integer id) {
        //
        SysMenu sysMenu = getById(id);
        return R.success(sysMenu);
    }


    //删除
    @Override
    public void deleteMenu(Integer id) {
        //删除时需要特别注意  如果在关系表表中有此id
        LambdaQueryWrapper<SysRoleMenu> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(id != null, SysRoleMenu::getMenuId, id);
        List<SysRoleMenu> sysRoleMenuList = sysRoleMenuService.list(wrapper);

        if (sysRoleMenuList != null && sysRoleMenuList.size() != 0) {
            //说明集合不为空 有数据  需要先将数据删除
            sysRoleMenuService.remove(wrapper);
        }
        removeById(id);
    }
}
